package com.asa.c;


/**
 * 
 * 
 * 
 * 
 * @author Administrator
 *
 */
public class B {
	
	
	/**
	 * 
	 * 
	 * 01-工具概述
			使用上一章命令行工具或组合能帮您获取目标Java应用性能相关的基础信息，但它们存在
			下列局限:
			1.无法获取方法级别的分析数据，如方法间的调用关系、各方法的调用次数和调用时间
			等(这对定位应用性能瓶颈至关重要)。
			2.要求用户登录到目标Java应用所在的宿主机上，使用起来不是很方便。
			3.分析数据通过终端输出，结果展示不够直观。
			为此，JDK提供了- - 些内存泄漏的分析工具，如jconsole, jvisualvm等， 用于辅助开发
			人员定位问题，但是这些工具很多时候并不足以满足快速定位的需求。所以这里我们介绍的
			工具相对多一些、丰富一些。
			图形化综合诊断工具

			图形化综合诊断工具
			●JDK自带的工具
			●jconsole:JDK自带的可视化监控工具。查看Java应用程序的运行概况、监控堆信
			息、永久区(或元空间)使用情况、类加载情况等
			>位置: jdk\bin\jconsole.exe
			, Visual VM:Visual VM是一个工具，它提供了一个可视界面，用于查看Java虚拟
			机上运行的基于Java技术的应用程序的详细信息。
			>位置: jdk\bin\jvisualvm. exe 
			●JMC:Java Mission Control, 内置Java Flight Recorder。 能够以极低的性
			能开销收集Java虚拟机的性能数据。
			●
			第三方工具
			●MAT: MAT(Memory Analyzer Tool)是基于Eclipse的内存分析工具，是一个快
			速、功能丰富的Java heap分析工具，它可以帮助我们查找内存泄漏和减少内存消
			耗
			>Eclipse的插件形式
			●JProfiler: 商业软件，需要付费。功能强大。
			>与Visua1VM类似
			●Arthas :Alibabal开源的Java诊断工具。深受开发者喜爱。
			●Btrace:Java运行时追踪工具。可以在不停机的情况下，跟踪指定的方法调用、构
			造函数调用和系统内存等信息。



	 * 
	 * 
	 * 02 jConsole
		03-Visual VM
		04-eclipse MAT
		05 JProfiler
		06- Arthas
		07-Java Mission Control
		08- Btrace


	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 */
	
	
	
	
	
	/**
	 * 
	 * 
	 * jconsole:
			●从Java5开始， 在JDK中自带的java监控和管理控制台。
			●用于对JVM中内存、线程和类等的监控，是一个基于JMX(java management extensions )的GUI性能
			监控工具。
			官方教程:
			https:/ / docs.oracle. com/ javase/ 7 / docs/ technotes/ guides/ management/ jconsole.htm1

	 * 
	 * 
	 * 启动
	 * jdk/bin目录下，启动jconsole.exe命 令即可
		不需要使用jps命令来查询

	 * 
	 * 
	 * 三种连接方式
	 	使用JConsole连接-一个正在本地系统运行的JVM,并 且执行程序的和运行JConsole的需要
		是同一个用户。JConsole使用文 件系统的授权通过RMI连接器连接到平台的MBean服务器上。
		Local
		这种从本地连接的监控能力只有Sun的JDK具有。
		使用下面的URL通过RMI连接器连接到一个JMX代理，serevejm::m//jn/i/mi//hostName:portNum/jmxrmi.
		Remote
		-e
		JConsole为建立连接，需要在环境变量中设置mx.remote.credentials来指定用户名和密码，从而进行授权。
		使用一个特殊的URL连接JMX代理。一般情况使用自己定制的连接器而不是RMI提供的连接器
		+ Advanced
		来连接JMX代理，或者是一个使用JDK1.4的实现了JMX和JMX Rmote的应用。

	 * 
	 * 
	 * 
	 * 
	 * 
	 */
	
	
	/**
	 * 03-Visual VM
			●Visual]VM是一个功能强大的多合故障诊断和性能监控的可视化工具。
			●它集成了多个JDK命令行工具，使用VisualVM可用于显示虚拟机进程及进程的配置和环境信息
			(jps,jinfo)，监视应用程序的CPU、GC、堆、方法区及线程的信息(jstat、jstack)等，甚至代
			替JConsole。
			●在JDK 6 Update 7以后，Visual VM便作为JDK的一 部分发布(VisualVM 在JDK/bin目录下)
			即:它完全免费。
			●此外，Visual VM也可以作为独立的软件安装:
			首页: https://visualvm.github .io/ index.html

	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 */
	
	
	
	/**
	 * 
	 * MAT(Memory Analyzer Tool)工具是-款功能 强大的Java堆内存分析 器。可以用于查找内存泄漏以
		及查看内存消耗情况。
		MAT是基于Eclipse开发的，不仅可以单独使用，还可以作为插件的形式嵌入在Eclipse中使用。是一
		款免费的性能分析工具，使用起来非常方便。大家可以在
		https://www. eclipse . org/mat/ downloads. php下载并使用MAT.

	 * 
	 * 
	 * MAT可以分析heap dulnp文件。在进行内存分析时，只要获得了反映当前设备内存映像的hprof文件，
		通过MAT打开就可以直观地看到当前的内存信息。
		一般说来， 这些内存信息包含:
		所有的对象信息，包括对象实例、成员变量、存储于栈中的基本类型值和存储于堆中的其他对象的
		引用值。
		●所有的类信息，包括classloader、类名称、父类、静态变量等
		●
		GCRoot到所有的这些对象的引用路径
		●线程信息，包括线程的调用栈及此线程的线程局部变量(TLS)

	 * 
	 * 
	 * 
	 * 
	 * 说明1:缺点:
		MAT不是一个万能工具， 它并不能处理所有类型的堆 存储文件。但是比较主流的厂家和格式，例如
		Sun,HP,SAP所采用的HPROF二进制堆存储文件，以及IBM的PHD堆存储文件等都能被很好的
		解析。
		说明2:
		I
		最吸引人的还是能够快速为开发人员生成内存泄漏报表，方便定位问题和分析问题。虽然MAT有如此强
		大的功能，但是内存分析也没有简单到一键完成的程度， 很多内存问题还是需要我们从MAT展现给我们
		的信息当中通过经验和直觉来判断才能发现。

	 * 
	 * 
	 * 
	 * 
	 * 方法一:通过前一章介绍的jmap工具生成，可以生成任意一个java进程的dump文件;
		方法二:通过配置JVM参数生成。
		选项"-XX: +HeapDumpOnOutOfMemoryError"或”-XX: +HeapDumpBeforeFullGC"
		选项"-XX:HeapDumpPath"所代表的含义就是当程序出现0utofMemory时，将会在相应的目录下
		生成一份dump文件。如果不指定选项“-XX:HeapDumpPath”则在当前目录下生成dump文件。
		对比:考虑到生产环境中几乎不可能在线对其进行分析，大都是采用离线分析，因此使用jmap+MAT工
		具是最常见的组合。
		方法三:使用Visua1VM可以 导出堆dump文件
		方法四:
		使用MAT既可以打开一个已有的堆快照，也可以通过MAT直接从活动Java程序中导出堆快照。
		该功能将借助ips列出当前正在运行的Java 进程，以供选择并获取快照。

	 * 
	 * 
	 * 
	 * 保留集(Retained Set):
			对象A的保留集指当对象A被垃吸回收后，可以被释放的所有的对象集合(包括对象A本身)，即对象A的保
			留集可以被认为是只能通过对象A被直接或间接访问到的所有对象的集合。通俗地说，就是指仅被对象
			A所持有的对象的集合。
			深堆(Retained Heap):
			深堆是指对象的保留集中所有的对象的浅堆大小之和。
			注意:浅堆指对象本身占用的内存，不包括其内部引用对象的大小。一个对象的深堆指只能通过该对象
			访问到的(直接或间接)所有对象的浅堆之和，即对象被回收后，可以释放的真实空间。

	 * 
	 * 
	 * 
	 * 另外一个常用的概念是对象的实际大小。这里，对象的实际大小定义为一个对象所能触及的所有对象的
浅堆大小之和，也就是通常意义上我们说的对象大小。与深堆相比，似乎这个在日常开发中更为直观和
被人接受，但实际上，这个概念和垃圾回收无夫。
下图显示了一个简单的对象引用关系图，对象A引用子C和D，对象B引用了C和E。那么对象A的浅堆大
小只是A本身，不含C和D，而A的实际大小为A、C、D三者之和。而A的深堆大小为A与D之和，由于对
象C还可以通过对象B访问到，因此不在对象A的深堆范围内。

	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 支配树(Dominator Tree)
		支配树的概念源自围论。
		MAT提供了一个称为支配树(Dominator Tree) 的对象图。支配树体现了对象实例间的支配关系。在
		对象引用图中，所有指向对象B的路径都经过对象A，则认为对象A支配对象B。如果对象A是离对象B最
		近的一个支配对象，则认为对象A为对象B的直接支配者。支配树是基于对象间的引用图所建立的，它有
		以下基本性质:
		●
		对象A的子树(所有被对象A支配的对象集合)表示对象A的保留集(retained set) ，即深堆。
		如果对象A支配对象B，那么对象A的直接支配者也支配对象B。
		●
		支配树的边与对象引用图的边不直接对应。
		如下图所示:左图表示对象引用图，右图表示左图所对应的支配树。对象A和B由根对象直接支配，由于
		在到对象C的路径中，可以经过A，也可以经过B，因此对象C的直接支配者也是根对象。对象F与对象
		D相互引用，因为到对象F的所有路径必然经过对象D，因此，对象D是对象F的直接支配者。而到对象
		D的所有路径中，必然经过对象C，即使是从对象F到对象D的引用，从根节点出发，也是经过对象C的，
		所以，对象D的直接支配者为对象C。
	 * 
	 * 说得很复杂，但简单点说就是一个对象只被另一个对象所饮用，那么就可以说另一个是它的支配对象，
	 * 很多个这样的关系组成起来就成了一个网，我们把网的冗余去掉，就是树了
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 补充2:支持使用OQL语言查询对象信息
		MAT支持一种类似于SQL的查询语言OQL (Object Query Language)OQL使用类
		SQL语法，可以在堆中进行对象的查找和筛选。

	 * 
	 * 
	 * 
	 * 
	 * 
	 * SELECT子句
			Select子句:
			在MAT中，Select 子句的格式与SQL基本-致，用于指定要显示的列。Select 子句中可以使
			用“*”，查看结果对象的引用实例(相当于outgoing references) 。
			SELECT
			* FROM java. util. Vector v
			使用“OBJECTS” 关键字，可以将返回结果集中的项以对象的形式显示。
			SELECT objects v. elementData FROM java. util.Vector V
			SELECT OBJECTS s.value FROM java.lang.String s
			在Select子句中，使用“AS RETAINED SET”关键字可以得到所得对象的保留集。
			SELECT AS RETAINED SET * FROM com. atguigu. mat . Student
			“DISTINCT"关键字用于在结果集中去除重复对象。
			SELECT DISTINCT OBJECTS classof(s) FROM java.lang.String s

	 * 
	 * 
	 * 
	 * From子句
			From子句用于指定查询范围，它可以指定类名、正则表达式或者对象地址。
			SELECT * FROM java.lang.String s
			下例使用正则表达式，限定搜索范围，输出所有com. atguigu包下所有类的实例
			SELECT * FROM " com\. atguigu\.. *"
			也可以直接使用类的地址进行搜索。使用类的地址的好处是可以区分被不同ClassLoader加
			载的同一种类型。
			select * from 0x37a0b4d

	 * 
	 * 
	 * 
	 * Where子句
			Where子句用于指定0QL的查询条件。0QL查询将只返回满足Where子句指定条件的对象。
			Where子句的格式与传统SQL极为相似。
			下例返回长度大于10的char数组。
			SELECT * FROM char[] s WHERE s . @length>10
			下例返回包含“java”子字符串的所有字符串，使用“LIKE"操作符，“LIKE” 操作符的
			操作参数为正则表达式。
			SELECT * FROM java.lang.String s WHERE toString(s) LIKE ". *java. *"
			下例返回所有value域不为nul1的字符串，使用‘
			=”操作符。
			SELECT * FROM java.lang.String s where s. value! =null
			Where子句支持多个条件的AND、OR运算。下 例返回数组长度大于15，并且深堆大于1000字
			节的所有Vector对象。
			SELECT * FROM java. util. Vector v WHERE v. elementData . @length>15 AN D
			V . @retainedHeapSize> 1000

	 * 
	 * 
	 * 
	 * 
	 * OQL中可以访问堆内对象的属性，也可以访问堆内代理对象的属性。访问堆内对象的属性时，
			格式如下:
			[ <alias>. ] <field> . <field>. <fie][d>
			其中alias为对象名称。
			访问java. io. File对象的path属性，并进一步访问path的value属性:
			SELECT toString(f .path.value) FROM java.io.File f
			下例显示了String对象的内容、objectid和objectAddress。
			SELECT s. toString(), s. @objectId, s. @objectAddress FROM 
			java.lang.String s
			下例显示java.util.Vector内部数组的长度。
			SELECT v. elementData . @length FROM java . util.Vector v
			下例显示了所有的java. util.Vector对象及其子类型
			select * from INSTANCEOF java. util. Vector

	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 */
	
	
	
	
	
	/**
	 * 
	 * 
	 * 在运行Java的时候有时候想测试运行时占用内存情况，这时候就需要使用测试工具查看了。在
			eclipse里面有Eclipse Memory Analyzer tool (MAT)插件可以测试，而在IDEA中也有这么一一个
			插件，就是JPrbfiler。
			JProfiler是由ej-technologies 公司开发的一款Java应用性能诊断工具。功能强大，但是收
			费。
			官网下载地址: https ://www. ej -technologies . com/ products/ jprofiler/overview . html

	 * 
	 * 
	 * 
	 * 特点:
			●使用方便、界面操作友好 (简单且强大)
			●对被分析的应用影响小( 提供模板)
			●
			CPU, Thread , Memory分析功能尤其强大
			●支持对jdbc , noSlq1, jsp, servlet, 
			socket等进行分析
			●支持多种模式(离线，在线)的分析
			●支持监控本地、远程的JVM
			●跨平台，拥有多种操作系统的安装版本

	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 数据采集方式
			JProfier数据采集方式分为两种: Sampling( 样本采集)和Instrumentation (重构模式)
			●
			Instrumentation:这是JProfiler全功能模式。在class 加载之前，JProfier把相关功能代
			码写入到需要分析的class的bytecode中，对正在运行的jvm有-定影响。
			优点:功能强大。在此设置中，调用堆栈信息是准确的。
			缺点:若要分析的class较多，则对应用的性能影响较大，CPU开销可能很高(取决于
			Filter的控制)。因此使用此模式般配合Filter使用 ，只对特定 的类或包进行 分析。
			●Sampling: 类似于样本统计，每隔- .定时间(5ms )将每个线程栈中方法栈中的信息统计出来。
			优点:对CPU的开销非常低，对应用影响小(即使你不配置任何Filter)
			●缺点:一些数据/特性不能提供(例如:方法的调用次数、执行时间)
			注: JProfiler本身没有指出数据的采集类型，这里的采集类型是针对方法调用的采集类型。因为
			JProfiler的绝大多数核心功能都依赖方法调用采集的数据，所以可以直接认为是JProfiler的数据
			采集类型。

	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 */
	
	
	
	
	
	
	
	
	
	/**
	 * Arthas (阿尔萨斯)
	 * 
	 * 
	 * 这两款王具在业界知名度也比较高，他们的优点是可以图形界面上看到各维度的性能数据，使用者根
		据这些数据进行综合分析，然后判断哪里出现了性能问题。
		但是建兩款工具也有个缺点，都必须在服务端项目进程中配置相关的监控参数。然后工具通过远程连
		接到项申进程，获取相关的数据。这样就会带来一些不便，比如线上环境的网络是隔离的，本地的监
		控工具根本连不上线上环境。并且类似于Jprofiler这样的商业工具，是需要付费的。
		那么有没有一款工具不需要远程连接，也不需要配置监控参数，同时也提供了丰富的性能监控数据呢
		?
		今天跟大家介绍一款阿里巴巴开源的性能分 析神器Arthas (阿尔萨斯)

	 * 
	 * 
	 * 
	 * 
	 * Arthas (阿尔萨斯)是Alibaba开源的Java诊断 工具，深受开发者喜爱。在线排查问题，无需重启
		; 动态跟踪Java代码;实时监控JVM状态。
		Arthas支持JDK 6+，支持Linux/Mac/Windows,采用命令行交互模式，同时提供丰富的Tab自
		动补全功能，进一步方便进行问题的定位和诊断。
		当你遇到以下类似问题而束手无策时，Arthas可以帮助你解决:
		这个类从哪个jar包加载的?为什么会报各种类相关的Exception?
		●我改的代码为什么没有执行到?难道是我没commit? 分支搞错了?
		●遇到问题无法在线上debug, 难道只能通过加日志再重新发布吗?
		●线上遇到某个用户的数据处理有问题，但线上同样无法debug,线下无法重现!
		●是否有一个全局视角来查看系统的运行状况?
		●
		有什么办法可以监控到JVM的实时运行状态?

	 * 当你遇到以下类似问题而束手无策时，Arthas可以帮助你解决:
			●这个类从哪个jar包加载的?为什么会报各种类相关的Exception?
			●我改的代码为什么没有执行到?难道是我没
			commit?分支搞错了?
			●遇到问题无法在线上debug,难道只能通过加日志再重新发布吗?
			●线上遇到某个用户的数据处理有问题，但线上同样无法debug, 线下无法重现!
			●
			是否有一个全局视角来查看系统的运行状况?
			I
			●
			有什么办法可以监控到JVM的实时运行状态?
			●
			怎么快速定位应用的热点，生成火焰图?

	 * 
	 * 
	 * 
	 * 
	 * 
	 * ●greys-anatomy: Arthjas代码基于Greys 二次开发而来，非常感谢Greys之前所有的工作，以
		及Greys原作者对Arthas提出的意见和建议!
		●termd: Arthas的命令行实现基于termd开发，是-款优秀的命令行程序开发框架，感谢
		termd提供了优秀的框架。
		●crash: Arthas的文本渲染功能基于crash中的文本渲染功能开发，可以从这里看到源码，感谢
		crash在这方面所做的优秀工作。
		●cli: Arthas的命令行界面基于vert . x提供的cli库进行开发，感谢vert. x在这方面做的优秀
		工作。
		●compiler Arthas里的内存编绎器代码来源
		●Apache Commons Net Arthas里的Telnet Client代码来源
		JavaAgent:运行在main方法之前的拦截器，它内定的方法名叫premain，也就是说先执行
		premain
		方法然后再执行main方法
		ASM:一个通用的Java字节码操作和分析框架。它可以用于修改现有的类或直接以二进制形式动
		态生成类。ASM提供了一些常见的字节码转换和分析算法，可以从它们构建定制的复杂转换和代
		码分析工具。ASM提供了与其他Java字节码框架类似的功能，但是主要关注性能。因为它被设计
		和实现得尽可能小和快，所以非常适合在动态系统中使用(当然也可以以静态方式使用，例如在
		编译器中)

	 * 
	 * 
	 * 
	 * 
	 * 
	 * 安装方式一:可以直接在Linux.上通过命令下载
		可以在官方Github 上进行 下载，如果速度较慢，可以尝试国内的码云Gitee 下载。
		github下载
		wget https://alibaba . github. io/ arthas/ arthas-boot. jar
		●Gitee
		下载
		wget https://arthas. gitee. io/ arthas- boot. jar
		安装方式二:
		也可以在浏览器直接访问https://alibaba. github. io/arthas/arthas-boot.jar,等待下载成
		功后，上传到Linux服务器 上。

	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * Arthas只是一 一个java 程序，所以可以直接用java -jar 运行。
			执行成功后，arthas提供 了一种命令行方式的交互方式，arthas 会检测当前服务器上的Java进程，
			并将进程列表展示出来，用户输入对应的编号(1、2、3、4...进行选择，然后回车。
			比如:方式1:
			java -jar arthas-boot.jar
			#选择进程(输入[]内编号(不是PID)回车)
			[INFO] arthas-boot version: 3.1.4
			[INFO] Found existing java process, please
			choose one and hit RETURN.
			*
			[1]: 11616 com.Arthas
			[2]: 8676
			[3]: 16200 org.jetbrains. jps . cmdline . Launcher
			[4]: 21032 org.jetbrains. idea. maven. server . RemoteMavenServer
			方式2:运行时选择Java 进程PID
			java -jar arthas-boot.jar [PID]

	 * 
	 * 
	 * 除了在命令行查看外，Arthas目前还支持Web Console。 在成功启动连接进程之后就已经自动启
		动，可以直接访问http://127.0.0. 1:8563/访问，页面上的操作模式和控制台完全-样。

	 * 
	 * 
	 * 基础指令
	 * 
	 * help- -- 查看命令帮助信息
		cat--打印文件内容 ，和linux里的cat命令类似
		echo-打印参数，和linux里的echo命令类似
		grep- -匹配查找，和linux里的grep命令类似
		tee--复制标准输入 到标准输出和指定的文件,和linux里的tee命令类似
		pwd--返回当前的工作目录,和linux命令类似
		cls--清空当前屏幕区域
		session--查看当前会话的信息
		reset- --重置增强类，将被Arthas增强过的类全部还原，Arthas 服务端关闭时会重置所有增强过的类
		version--输出当前目 标Java进程所加载的Arthas版本号
		history- -- 打印命令历史
		quit--- _退出当前 Arthas客户端，其他Arthas客户端不受影响
		stop- - -关团Arthas服务端，所有Arthas客户端全部退出
		keymap- -- Arthas快捷键列表及自定义快捷键

	 * 
	 * 
	 * 
	 * 
	 * jvm相关
		●dashboard-- 当前系统的实时数据面板
		●thread- -- 查看当前JVM的线程堆栈信息
		●jvm-- _查看当前JVM的信息
		●sysprop-- 查看和修改JVM的系统属性
		sysenv--查看JVM的环境变量
		●vmoption-- 查看和修改JVM里诊断相关的option
		●perfcounter-- 查看 当前JVM的Perf Counter信息
		●logger-- 查看和修改logger
		●getstatic- -- 查看类的静态属性
		●ognl-- 执行ognl表达式
		●mbean-- 查看Mbean的信息
		●heapdump- - - dump java heap,类似jmap命令的heap dump功能,导出文件

	 * 
	 * 
	 * 
	 * 
	 * 
	 * sc命令:查看JVM已加载的类信息
			●https://arthas . aliyun. com/ doc/sc
			●
			常用参数:
			class-pattern类 名表达式匹配
			-d 输出当前类的详细信息，包括这个类所加载的原始文件来源、类的声明、加载的
			ClassLoader等详细信息。 如果一个类被多个ClassLoader所加载， 则会出现多次
			-E 开启正则表达式匹配，默认为通配符匹配
			-f 输出当前类的成员变量信息(需要配合参数-d-起使用)
			-X
			指定输出静态变量时属性的遍历深度，默认为0，即直接使用toString 输出
			●
			补充:
			1. class-pattern支持全限定名，如com. test . AAA,也支持com/test/ AAA这样的格式
			，这样，我们从异常堆栈里面把类名拷贝过来的时候，不需要在手动把/替换为.了。
			2. sc默认开启了子类匹配功能，也就是说所有当前类的子类也会被搜索出来，想要精确的
			匹配，请打开options disable-sub-class true开关

	 * 
	 * 
	 * 
	 * 
	 * sm命令:查看己加载类的方法信息
		●
		https://arthas. aliyun. com/doc/sm
		●
		sm
		命令只能看到由当前类所声明(declaring) 的方法，父类则无法看到。
		常用参数:|
		class- pattern
		类名表达式匹配
		method-pattern方法 名表达式匹配
		-d 展示每个方法的详细信息
		-E 开启正则表达式匹配，默认为通配符匹配

	 * 
	 * 
	 * 
	 * 
	 * 
	 * jad命令:反编译指定已加载类的源码
			●
			https :// arthas . aliyun. com/ doc/jad
			●
			在Arthas Console. 上， 反编译出来的源码是带语法高亮的，阅读更方便
			●
			当然，反编译出来的java 代码可能会存在语法错误，但不影响你进行阅读理解
			●
			编译java. lang . String

	 * 
	 * 
	 * 
	 * mc命令: Memory Compiler/内存编译器，编译. java文件生成. class
			https:/ /arthas . aliyun. com/ doc/ mc
			mc /tmp/Test. java
			
		redefine命令:加载外部的. class文件，redefine jvm已加载的类。
			https://arthas . aliyun. com/ doc/ redefine
			推荐使用retransform 命令

	 * 
	 * 
	 * classloader命令:查看classloader 的继承树，urls, 类加载信息
			https:/ /arthas. aliyun. com/doc/classloader
			●了解当前系统中有多少类加载器，以及每个加载器加载的类数量，帮助您判断是否有类
			加载器泄漏。
			●
			常用参数:
			-t :查看ClassLoader的继承树
			-1 :按类加载实例查看统计信息
			-C :用classloader对应的hashcode 来查看对应的jar urls

	 * 
	 * 
	 * 
	 * 
	 */
	
	
	/**
	 * 
	 * 
	 * 
	 * monitor命令:方法执行监控
			●对匹配class-pattern / method- pattern的类、方法的调用进行监控。涉及方法的调
			用次数、执行时间、失败率等
			●https://arthas . aliyun. com/ doc/ monitor
			monitor命令是--个非实时返回命令
			●
			常用参数:|
			class-pattern
			类名表达式匹配
			method-pattern方 法名表达式匹配
			-C
			统计周期，默认值为120秒

	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * watch命令:方法执行数据观测
			https://arthas. aliyun. com/ doc/watch
			●
			让你能方便的观察到指定方法的调用情况。能观察到的范围为:返回值、抛出异常、入
			参，通过编写groovy
			表达式进行对应变量的查看。
			●
			常用参数: 
			class-pattern
			类名表达式匹配
			method-pattern
			方法名表达式匹配
			express
			观察表达式
			condition-express
			条件表达式
			-b 在方法调用之前观察(默认关闭)|
			-e
			在方法异常之后观察(默认关闭)
			-S
			在方法返回之 后观察(默认关闭)
			-f 在方法结束之后(正常返回和异常返回)观察(默认开启)
			-X
			指定输出结果的属性遍历深度，默认为0
			#cost
			方法执行耗时
			I
			●
			说明:这里重点要说明的是观察表达式，观察表达式的构成主要由ognl 表达式组成，
			所以你可以这样写"{params, return0bj}"，只要是一 一个合法的ognl 表达式，都能被
			正常支持。
			●
			举例: watch 全限定类名方法名returnObj

			

	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * trace命令:方法内部调用路径，并输出方法路径上的每个节点上耗时I
			●https://arthas . aliyun. com/ doc/trace
			补充说明:
			●
			trace
			命令能主动搜索class-pattern / method-pattern对应的方法调用路径，渲
			染和统计整个调用链路上的所有性能开销和追踪调用链路。
			●
			trace能方便的帮助你定位和发现因RT高而导致的性能问题缺陷，但其每次只能跟踪
			-.级方法的调用链路
			●
			trace在执行的过程中本身是会有一定的性能开销，在统计的报告中并未像
			JProfiler -样预先减去其自身的统计开销。所以这统计出来有些许的不准，渲染路径
			上调用的类、方法越多，性能偏差越大。但还是能让你看清一些 事情的。


	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * tt命令:方法执行数据的时空隧道，记录下指定方法每次调用的入参和返回信息，并能对这
			些不同的时间下调用进行观测。
			●
			https://arthas. aliyun. com/doc/tt
			●TimeTunnel的缩写| I
			●
			常用参数:
			-t
			表明希望记录下类*Test 的print 方法的每次执行情况。
			-n
			3指定 你需要记录的次数，当达到记录次数时Arthas
			会主动中断tt命令的记录过
			程，避免人工操作无法停止的情况。
			-s 筛选指定方法的调用信息
			-i 参数后边跟着对应的INDEX编号查看到它的详细信息
			-P
			重做一次调用通过 --replay-times 指定调用次数，通过
			--replay-interval指定多次调用间隔(单位ms,默认1000ms )


	 * 
	 * 
	 * 
	 * monitor命令:方法执行监控
			对匹配class-pattern / method-pattern的类、方法的调用进行监控。涉及方法的调
			用次数、执行时间、失败率等
			●https: / /arthas. aliyun. com/ doc/ monitor
			●
			monitor命令是--个非实时返回命令
			●
			常用参数:
			class -pattern
			类名表达式匹配
			method-pattern方法 名表达式匹配
			-C
			统计周期，默认值为120秒

	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 */
	
	
	
	
	
	
	
	

}
